#ifndef SOLDIER_H
#define SOLDIER_H

#include "Agent.hpp"
#include "Bodies/SoldierBody.h"
#include "SteeringBehaviours/SteeringSeekBehaviour.h"
#include "SteeringBehaviours/SteeringFaceBehaviour.h"
#include "SteeringBehaviours/SteeringAlignBehaviour.h"

#include "Formation/FormationBody.h"

class Soldier : public Agent
{
private:
    double STOP_RADIUS;
    double SLOW_RADIUS;
    double STOP_DISTANCE;
    SteeringSeekBehaviour* m_seekBehaviour;
    SteeringFaceBehaviour* m_faceBehaviour;
    SteeringAlignBehaviour* m_alignBehaviour;
    bool m_isLeader;

protected:
    FormationBody* m_formationBody;
    int m_formationPosition;

public:
    Soldier(FormationBody* formationBody, int formation);
    ~Soldier();
    Soldier(Soldier& s);
    Soldier& operator=(Soldier& s);
    void live();
    std::vector<Perception*> getPerceptions();
    bool isLeader();
    void changeFormationBody(FormationBody* formationBody);
};

#endif // SOLDIER_H
